package com.fly.demo;

import java.util.Arrays;
import java.util.Comparator;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.junit.jupiter.api.Test;

/**
 * Lambda基础
 */
public class LambdaBasic
{
    @Test
    public void test()
    {
        /**
         * 在Java程序中，我们经常遇到一大堆单方法接口，即一个接口只定义了一个方法： Comparator Runnable Callable 可以用Lambda表达式替换单方法接口
         */
        
        // 以实现字符串数组排序为例
        String[] arrayStr = new String[] {"a", "d", "c", "o", "r", "e", "p"};
        
        // 非lambda
        Arrays.sort(arrayStr, new Comparator<String>()
        {
            @Override
            public int compare(String s1, String s2)
            {
                return s1.compareTo(s2);
            }
        });
        
        // lambda
        Arrays.sort(arrayStr, (s1, s2) -> {
            return s1.compareTo(s2);
        });
        
        Arrays.asList(arrayStr).forEach(System.out::print);
        System.out.println(ToStringBuilder.reflectionToString(arrayStr, ToStringStyle.SIMPLE_STYLE));
    }
}
